﻿//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//#include <string.h>
//#include <time.h>
//#include <stdlib.h>

#include "common.h"

void guess_manu()
{
	printf("\n##########################################\n");
	printf("################ 请选择： ################\n");
	printf("######## 1.开始猜数字 0.退出程序 #########\n");
	printf("##########################################\n");
}

void guess_program()
{
	// 提示用户输入数字
	printf("---------请输入一个0~100之间的整数--------\n");

	//1.生成随机数
	//RAND_MAX -> 32767
	// rand 返回一个随机整数（范围为0~RAND_MAX  RAND_MAX)，不需要参数
	// rand 的头文件 为 stdlib.h
	// 单独使用 rand 多次重复生成随机数会同程序之前的运行
	int r_n = rand(); // 0~32767
	if (0 == r_n % 100)
		r_n = 0;
	else
		r_n = r_n % 100 + 1; // 通过取模保证 r_n 为 0~100 之间的整数
	//printf("%d\n", r_n);

	//2.用户猜数字
	int gass_num = 0; // 初始化
	int count = 1; // 初始化计数
	printf("哈哈，请输入你猜的整数：");
	int start_time = time(NULL);  // 记录开始猜数字时间
	while (1)
	{
		int gs = scanf("%d", &gass_num);
		if (gass_num < r_n)
			printf("猜小了，请重新猜数字：");
		else if (gass_num > r_n)
			printf("猜大了，请重新猜数字：");
		else
		{
			int gass_time = time(NULL);  // 记录猜对时间
			printf("恭喜猜对了，本次猜数字用时%d秒，共计猜测%d次\n",
				gass_time - start_time, count);
			printf("现在的时间戳为：%d\n", (unsigned int)time(NULL));
			break;
		}
		count++;
	}
}

int guess_game()
{
	char input = '0';  // 定义字符，不是字符串
	// NULL 表示空指针，time 的头文件为 time.h
	// time 传入 NULL 返回时间戳（1970年1月1日0点0分到现在的时间整数，单位为秒）
	srand((unsigned int)time(NULL));  // NULL 相当于 0
	// (unsigned int) 用于将数据类型强制转换为 unsigned int（无符号的整型）
	// srand 用于设置随机起始点。参数为 int 类型，
	// 整个工程文件只需要设置一次随机起点
	do
	{
		guess_manu();
		printf("请选择：");
		int num_len = scanf("%c", &input);
		switch (input)
		{
		case '1':
		{
			printf("开始猜数字\n");
			guess_program();
			break;
		}
		case '0':
			printf("退出程序\n");
			break;
		default:
			printf("选择错误，请重新选择\n");
			break;
		}
	} while (48 != input);  // 因为是字符，所以会将字符串逐一读取与判断
	return 0;
}
